package com.fgaejiang.io;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.HiddenFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.management.monitor.Monitor;
import java.io.File;

/**
 * 监听器工厂,用于生产不同的文件监听器
 *
 * @author <发哥讲Java-694204477@qq.com>
 * @version 1.0
 * @date 2021/6/9 21:22
 */
@Slf4j
@Component
public class FileListenerFactory {

    @Autowired
    WorkConfig workConfig;

    @Autowired
    FileListener fileListener;

    /**
     * 获取一个 监听目录的线程
     *
     * @return 执行线程
     */
    public FileAlterationMonitor getMonitor() {
        // 创建文件过滤器
        // 前缀过滤器
        IOFileFilter prefixFileFilter = FileFilterUtils.prefixFileFilter("hello");
        // 后缀过滤器
        IOFileFilter suffixFileFilter = FileFilterUtils.suffixFileFilter(".txt");
        // 其他
        //        IOFileFilter directories = FileFilterUtils.and(
        //                FileFilterUtils.directoryFileFilter(),
        //                HiddenFileFilter.VISIBLE);
        //        IOFileFilter files = FileFilterUtils.and(
        //                FileFilterUtils.fileFileFilter(),
        //                FileFilterUtils.suffixFileFilter(".log"));

        // 俩者满足其一
        IOFileFilter filter = FileFilterUtils.or(prefixFileFilter, suffixFileFilter);
        // 装配过滤器
        FileAlterationObserver observer = new FileAlterationObserver(new File(workConfig.getListerPath()), filter);
//        FileAlterationObserver observer = new FileAlterationObserver(new File(workConfig.getListerPath()));
        //  向监听者添加监听器
        observer.addListener(fileListener);
        // 返回监听者
        return new FileAlterationMonitor(workConfig.getInterval(), observer);
    }


}
